package com.liyiruo.tx.service.main8;

import com.liyiruo.tx.mapper.TableAMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;

/**
 * 执行结果就是a1没有存储，而b1和b2存储成功，
 * 因为testB的事务传播设置为REQUIRES_NEW,所以在执行testB时会开启一个新的事务，
 * testMain中发生的异常时在testMain所开启的事务中，
 * 所以这个异常不会影响testB的事务提交，testMain中的事务会发生回滚，
 * 所以最终a1就没有存储，而b1和b2就存储成功了。
 *
 * 与这个场景对比的一个场景就是testMain和testB都设置为REQUIRED，那么上面的代码执行结果就是所有数据都不会存储，因为testMain和testMain是在同一个事务下的，所以事务发生回滚时，所有的数据都会回滚
 * @author liyiruo
 * @Description
 * @Date 2022/2/18 下午5:11
 */
@Service
public class TestMain8 {

    @Autowired
    private TableAMapper tableAMapper;
    @Autowired
    private TestBo testBo8;

    @Transactional(propagation = Propagation.REQUIRED)
    public void testMain() {
        tableAMapper.addTableA();  //调用A入参a1
        testBo8.testB();    //调用testB
        int i = 1 / 0;
    }
}
